from uiautomation import WindowControl, GetFocusedControl
import setting
from Utils import send_answer, save_dialogue

# 绑定程序名字为微信的窗口
wx = WindowControl(
    Name='微信',
)

# 切换到微信窗口
wx.SwitchToThisWindow()
# 寻找会话控件，可以获取到聊天列表中的每个联系人
topic = wx.ListControl(Name='会话')

# 接收消息
while True:
    # 监听4个会话
    we = topic.TextControl(searchDepth=4)

    # 持续运行，防止报错。
    while not we.Exists(0):
        pass

    # 如果新来了一条消息，那么会出现一个1的小红标，点击出现这个图表的对话
    if we.Name:
        we.Click(simulateMove=False)

        # 获取当前会话的联系人id
        focused_control = GetFocusedControl()
        # 获取控件的名称
        control_name = focused_control.Name
        # 打印控件名称
        print("发送者：", control_name)

        # 获取最后一条消息
        last_msg = wx.ListControl(Name="消息").GetChildren()[-1].Name
        print("消息：", last_msg)

        # 发送用户接收到了消息，并回复以gpt的答案和当前对话的id
        answer, topic_id = send_answer(wx, msg_after_receive=setting.msg_after_receive, last_msg=last_msg,
                                       user=control_name)
        wx.SendKeys("{CTRL}{F}")
        wx.SendKeys("TML")
        wx.SendKeys("{Enter}")

        # 将每次对话内容保存到数据库中
        userMessage = (control_name, 'user', last_msg, topic_id)
        save_dialogue(userMessage)
        asistMessage = (control_name, 'assistant', answer, topic_id)
        save_dialogue(asistMessage)
